Subclassificazione numpy.ndarray è una decisione architettonica di alto livello utilizzata per creare strutture dati specifiche del dominio che incapsulano metadati (come unità di misura, coordinate o tassi di campionamento) insieme ai dati numerici grezzi. A differenza delle classi Python standard, gli oggetti NumPy vengono spesso creati senza richiamare __init__.
Il triangolo dell'inizializzazione
Gli architetti devono considerare tre percorsi distinti di istanziazione in cui il costruttore standard viene saltato:
- Costruzione esplicita: Utilizzando il nome della classe (gestito da
__new__). - Casting della vista: Riinterpretare un array esistente come tua sottoclasse.
- Nuovo-da-modello: Creare un taglio o una copia di un'istanza esistente di sottoclasse.
L'hook specializzato __array_finalize__ è il punto di convergenza dove i metadati sono sincronizzati tra questi percorsi.
Fragilità comportamentale
La subclassificazione crea un legame stretto con l'API C di NumPy. Operazioni che restituiscono scalari (ad esempio, np.mean()) spesso "rimuovono" l'identità della sottoclasse, tornando a un tipo standard ndarray. La gestione dei metadati è quindi sempre un rischio, a meno che non sia gestita con cura tramite transizioni di stato.
isinstance(obj, np.ndarray). Altrimenti, Composizione (avvolgendo un array) è più sicura.